/*
 * Extension.java
 *
 * Created on 23 marzo 2004, 0.00
 */

package net.ermannofranco.xml.schema;

/**
 * 
 * @author ermanno (ermanno.franco@gmail.com)
 */
public class Extension extends ExtensionSimple {
	/**
	 * 
	 */
	private static final long serialVersionUID = 4324400289229124287L;

	private Content gestoreContenuto;

	/**
	 * Creates a new instance of Extension Protetto
	 * 
	 * @param level
	 *            livello di indentazione
	 * @param container
	 *            tag contenitore
	 */
	protected Extension(int level, ISchemaTag container) {
		super(level, container);
	}

	/**
	 * @return
	 */
	public Sequence setSequence() {
		if (gestoreContenuto != null)
			throw new SchemaException("Contenuto di ComplexType gia' assegnato");
		Sequence s;
		add(s = new Sequence(getLevel() + 1, this, true));
		gestoreContenuto = Content.SEQUENCE;
		return s;
	}

	/**
	 * @return
	 */
	public Choice setChoice() {
		if (gestoreContenuto != null)
			throw new SchemaException("Contenuto di ComplexType gia' assegnato");
		Choice s;
		add(s = new Choice(getLevel() + 1, this));
		gestoreContenuto = Content.CHOICE;
		return s;
	}

	/**
	 * @return
	 */
	public Group setGroup(Group groupEl) {
		if (gestoreContenuto != null)
			throw new SchemaException("Contenuto di ComplexType gia' assegnato");
		Group s;
		add(s = new Group(getLevel() + 1, this));
		s.setRef(groupEl);
		gestoreContenuto = Content.GROUP;
		return s;
	}

	/**
	 * @return
	 */
	public All setAll() {
		if (gestoreContenuto != null)
			throw new SchemaException("Contenuto di ComplexType gia' assegnato");
		All s;
		add(s = new All(getLevel() + 1, this));
		gestoreContenuto = Content.ALL;
		return s;
	}

}
